﻿//(c) Copyright [2015] Hewlett-Packard Enterprise Development, L.P.
//All rights reserved.
//Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
//1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
//2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.

//THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 
//THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS 
//BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 
//OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 
//OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
using HP.HPTRIM.SDK;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace HP.HPTRIM.Samples.Thumbnails
{
    public static class Extensions
    {
        private static bool getExistingRendition(Record record, out RecordRendition thumbNailRendition)
        {
            thumbNailRendition = null;
            foreach (RecordRendition rendition in record.ChildRenditions)
            {
                if (rendition.TypeOfRendition == RenditionType.Other1)
                {
                    thumbNailRendition = rendition;
                    return true;
                }
            }

            return false;
        }

        public static void SetThumbnailRendition(this Record record, TempFile renditionFile)
        {
            if (renditionFile.FileExists)
            {
                RecordRendition rendition;

                if (getExistingRendition(record, out rendition))
                {
                    using (TempFile existingThumbnail = new TempFile(rendition))
                    {
                        if (renditionFile.CompareWith(existingThumbnail.FilePath) == false)
                        {
                            rendition.SetDocument(renditionFile.FilePath);
                            // the line below is more important than it looks.  There seems to be a bug with renditions
                            // so that, on an existing rendition, SetDocument() has no affect unless you change something
                            // else as well, like the Notes.
                            rendition.SetNotes("New thumbnail created", NotesUpdateType.AppendWithUserStamp);
                        }
                    }
                }
                else
                {
                    record.ChildRenditions.NewRendition(renditionFile.FilePath, RenditionType.Other1, "Thumbnail Image");
                }

                record.Save();
            }
        }
    }
}
